package com.thread.sync.sync12;

import java.util.concurrent.locks.ReentrantLock;

public class TestHonunt {
    //重入锁
    private ReentrantLock lock = new ReentrantLock();

    /**
     * lock.getHoldCount()方法：获取当前线程保持此锁的个数,即lock方法被调用了几次,unlock后,数会减一
     * 只能在当前调用线程内部使用，不能再其他线程中使用
     * 那么我可以在m1方法里去调用m2方法，同时m1方法和m2方法都持有lock锁定即可 测试结果holdCount数递增
     */
    public void m1() {
        try {
            lock.lock();
            System.out.println("进入m1方法，holdCount数为：" + lock.getHoldCount());
            //调用m2方法
            m2();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
        }
    }

    public void m2() {
        try {
            lock.lock();
            System.out.println("进入m2方法，holdCount数为：" + lock.getHoldCount());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            lock.unlock();
            System.out.println("退出m2方法，holdCount数为：" + lock.getHoldCount());
        }
    }

    public static void main(String[] args) {
        TestHonunt thc = new TestHonunt();
        thc.m1();
    }

}
